﻿#region Imports
using System.Windows;
using System.Windows.Input;
#endregion Imports

namespace BookManager.ViewModels
{
    /// <summary>
    /// Sets focus on a control and allows Binding as per MVVM architecture<para />
    /// ( LostFocus is not updating value to false )<para />
    /// [ vm:FocusExtension.IsFocused="{Binding IsSearchBoxFocused}" ]
    /// </summary>
    public static class FocusExtension
    {
        public static bool GetIsFocused(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsFocusedProperty);
        }

        public static void SetIsFocused(DependencyObject obj, bool value)
        {
            obj.SetValue(IsFocusedProperty, value);
        }

        public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached(
            "IsFocused", typeof(bool), typeof(FocusExtension),
            new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));

        private static void OnIsFocusedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var uie = (UIElement)d;
            if ((bool)e.NewValue)
            {
                uie.Focus(); // Don't care about false values
                Keyboard.Focus(uie);
            }
        }
    }
}
